#ifndef __CONVOLUTION_TEXTURE_H__
#define __CONVOLUTION_TEXTURE_H__

#include <cuda.h>
#include <cuda_runtime.h>

#define KERNEL_RADIUS 8
#define KERNEL_LENGTH (2 * KERNEL_RADIUS + 1)

////////////////////////////////////////////////////////////////////////////////
// Reference CPU convolution
////////////////////////////////////////////////////////////////////////////////
void convolutionRowCPU(
					   float *h_Dst,
					   float *h_Src,
					   float *h_Kernel,
					   int imageW,
					   int imageH,
					   int kernelR
					   );

void convolutionColumnCPU(
						  float *h_Dst,
						  float *h_Src,
						  float *h_Kernel,
						  int imageW,
						  int imageH,
						  int kernelR
						  );



////////////////////////////////////////////////////////////////////////////////
// GPU convolution
////////////////////////////////////////////////////////////////////////////////
void setConvolutionKernel(float *h_Verticalkernel, float *h_Horizontalkernel);

void convolutionRowGPU(
						float *d_Dst, 
						cudaArray *a_Src,
						int imageW, 
						int imageH
						);

void convolutionColumnGPU(
						   float *d_Dst,
						   cudaArray *a_Src,
						   int imageW,
						   int imageH
						   );

#endif //__CONVOLUTION_TEXTURE_H__